﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.SqlClient;
using System.Configuration;
using System.Globalization;
using SW_SoftBully.Models.ModuloServicios.MantenimientoCorrectivo;

namespace SW_SoftBully.Models.ModuloServicios.CuotaExtraordinaria
{
    public class CuotaExtraordinariaDAO
    {
         public string RegistrarCuotaExtraordinaria(CuotaExtraordinariaBean cuota) {
            try{
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;
                List<CuotaExtraordinariaBean> listaCuotas = new List<CuotaExtraordinariaBean>();
                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
                
                sqlCon.Open();
                //string XD2 = cuota.FechaI.ToShortDateString();
                //System.Diagnostics.Debug.WriteLine("--------------------------------------> llego" + xD + " " + XD2);
                
                string commandString = "INSERT INTO Cuota_Extraordinaria (Monto,Motivo,fecha_inicio,Estado,id_Edificio,periodo,id_mantenimiento_correctivo) " +
                    "VALUES (" + cuota.MontoTotal + ",'" + cuota.TextAreaCuotaExtraordinaria + "'," + "convert(datetime,'" + cuota.FechaI + "',103), " + cuota.Estado + ", " + cuota.id_Edificio + ", "+
                    cuota.Periodo+ ", "+ cuota.IdCorrectivo +")";
                System.Diagnostics.Debug.WriteLine("--------------------------------------> llego" + commandString);
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                sqlCon.Open();
                commandString = "SELECT d.id_departamento, ce.IdCuotaExtraordinaria FROM departamento d, departamento_x_habitante dxh, incidencia_x_habitante ixh, mantenimiento_correctivo mc, " +
                " Cuota_Extraordinaria ce WHERE d.id_departamento=dxh.id_departamento and dxh.id_persona = ixh.id_habitante and ixh.id_incidencia = mc.id_incidencia and" +
                " mc.id_mantenimiento_correctivo= ce.id_mantenimiento_correctivo and ce.id_mantenimiento_correctivo = "+ cuota.IdCorrectivo+ " and ce.estado=1";

                sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    CuotaExtraordinariaBean CuotaExtra = new CuotaExtraordinariaBean();
                    CuotaExtra.id_departamento = (int)(dataReader[0]);
                    CuotaExtra.Id = (int)dataReader[1];
                    listaCuotas.Add(CuotaExtra);
                }
                sqlCon.Close();

                sqlCon.Open();

                foreach (CuotaExtraordinariaBean Cuota in listaCuotas)  {

                    commandString = "INSERT INTO cuota_extraordinaria_x_departamento (IdCuotaExtraordinaria,id_departamento, monto, estado) VALUES (" + Cuota.Id +
                    ", " + Cuota.id_departamento+", "+cuota.MontoTotal/listaCuotas.Count+ ", 1)";
                sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();
                System.Diagnostics.Debug.WriteLine("--------------------------------------> llego" + commandString);
                }
                sqlCon.Close();

                cuota.conexion = "Bien";
                
            }

            catch{
                cuota.conexion = "Conexion Fallida";
            }

            return cuota.conexion;
        }

         public string ModificarCuotaExtraordinaria(CuotaExtraordinariaBean cuota)
         {
             try
             {
                 String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                 SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                 sqlCon.Open();

                 string commandString = "UPDATE Cuota_Extraordinaria SET periodo = " +
                     cuota.Periodo + ", Motivo = '" + cuota.TextAreaCuotaExtraordinaria + "' WHERE IdCuotaExtraordinaria = " + cuota.Id;
                 System.Diagnostics.Debug.WriteLine("--------------------------------------> llego" + commandString);
                 SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                 sqlCmd.ExecuteNonQuery();

                 sqlCon.Close();

                 cuota.conexion = "Bien";

             }

             catch
             {
                 cuota.conexion = "Conexion Fallida";
             }

             return cuota.conexion;
         }

         public string EliminarCuotaExtraordinaria(CuotaExtraordinariaBean cuota)
         {
             try
             {
                 String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                 SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                 sqlCon.Open();

                 string commandString = "UPDATE Cuota_Extraordinaria_x_departamento SET Estado = 0 WHERE IdCuotaExtraordinaria = "
                     + cuota.Id;
                 System.Diagnostics.Debug.WriteLine("--------------------------------------> llego" + commandString);
                 SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                 sqlCmd.ExecuteNonQuery();
                 commandString = "UPDATE Cuota_Extraordinaria set Estado = 0 where IdCuotaExtraordinaria = "  + cuota.Id;
                 System.Diagnostics.Debug.WriteLine("--------------------------------------> llego" + commandString);
                 sqlCmd = new SqlCommand(commandString, sqlCon);
                 sqlCmd.ExecuteNonQuery();
                 sqlCon.Close();

                 cuota.conexion = "Bien";
             } catch
             {  cuota.conexion = "Conexion Fallida";}
             return cuota.conexion;
         }



         public List<CuotaExtraordinariaBean> ListarCuotas(CuotaExtraordinariaBean cuota)
        {
            try
            {
                List<CuotaExtraordinariaBean> listaCuotas = new List<CuotaExtraordinariaBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT cp.*, e.Nombre, m.Nombre FROM Cuota_Extraordinaria cp, Edificio e, mantenible m, mantenimiento_correctivo mc "+
                "where cp.id_Edificio=e.id_Edificio and cp.id_mantenimiento_correctivo = mc.id_mantenimiento_correctivo and mc.id_mantenible = m.id_mantenible and cp.Estado = "+ cuota.Estado;

                System.Diagnostics.Debug.WriteLine("--------------------------------------> llego" + commandString);

                if (cuota.id_Edificio != 0) commandString += " and cp.id_Edificio =" + cuota.id_Edificio;
                if (cuota.FechaB != null) commandString += " and convert(datetime,'"+ cuota.FechaB + "',103) between cp.fecha_inicio and cp.fecha_inicio + 30*(cp.periodo -1)";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    CuotaExtraordinariaBean CuotaExtra = new CuotaExtraordinariaBean();
                    CuotaExtra.Id = (int)dataReader[0];
                    CuotaExtra.MontoTotal = Convert.ToDouble(dataReader[1]);
                    CuotaExtra.TextAreaCuotaExtraordinaria = (string)dataReader[2];
                    CuotaExtra.FechaI = ((DateTime)dataReader[3]).ToString("dd/MM/yyyy");
                    CuotaExtra.Estado = (int)dataReader[4];
                    CuotaExtra.id_Edificio = (int)dataReader[5];
                    CuotaExtra.Periodo=(int)dataReader[6];
                    CuotaExtra.IdCorrectivo=(int)dataReader[7];
                    CuotaExtra.NombreEdificio= (string)dataReader[8];
                    CuotaExtra.NombreMantenible = (string)dataReader[9];
                    listaCuotas.Add(CuotaExtra);
                }

                dataReader.Close();
                sqlCon.Close();
                return listaCuotas;
            }
            catch {
                return null;
            }
        }

         public List<MantenimientoCorrectivoBean> ListarMantenimientoCorrectivo(MantenimientoCorrectivoBean mantenimientocorrectivo)
         {
             try
             {
                 List<MantenimientoCorrectivoBean> listamantenimientocorrectivo = new List<MantenimientoCorrectivoBean>();

                 String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                 SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                 sqlCon.Open();
                 string commandString = "select mc.*, m.Nombre from mantenimiento_correctivo mc, mantenible m where " +
                     "mc.id_mantenible=m.id_mantenible and mc.id_edificio=" + mantenimientocorrectivo.ID_Edificio + " and mc.estado = 1";
                 SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                 SqlDataReader dataReader = sqlCmd.ExecuteReader();

                 while (dataReader.Read())
                 {
                     MantenimientoCorrectivoBean MantCorrectivo = new MantenimientoCorrectivoBean();
                     MantCorrectivo.Fecha = ((DateTime)dataReader[0]).ToString("dd/MM/yyyy");
                     MantCorrectivo.ID_Mantenible = (int)dataReader[1];
                     MantCorrectivo.ID = (int)dataReader[2];
                     MantCorrectivo.Observacion = (string)dataReader[3];
                     MantCorrectivo.Estado = (int)dataReader[4];
                     MantCorrectivo.Monto = Convert.ToDouble(dataReader[5]);
                     MantCorrectivo.Nombre = (string)dataReader[6];
                     MantCorrectivo.Lugar = (string)dataReader[8];
                     MantCorrectivo.Nombre_Mantenible = (string)dataReader[12];
                     listamantenimientocorrectivo.Add(MantCorrectivo);
                 }

                 dataReader.Close();
                 sqlCon.Close();
                 return listamantenimientocorrectivo;
             }
             catch
             {
                 return null;
             }
         }
    }
}

